# coding: utf-8
# @Author: ChuiZi
import logging
import os

from lib.baseParams import rootPath


class Find:
    # 寻找文件绝对路径的后缀名
    @classmethod
    def suffixName(cls, file_abspath):
        """
        寻找文件绝对路径的后缀名

        :param file_abspath: 文件所在的绝对路径
        :return: 后缀名
        """
        try:
            file_extension_name = os.path.splitext(file_abspath)[1]
            if file_extension_name != '':
                return file_extension_name.replace('.', '')
            else:
                return False
        except Exception as e:
            logging.info(e)

    # 符合后缀条件文件的绝对路径组成的列表
    @classmethod
    def suffixeAbsPaths(cls, path: str, *file_suffixes, deepth: bool = False, abs_paths=None):
        """
        1.遍历当前路径下所有数据
        2.判断数据是否是文件而不是文件夹
        3.是文件则添加进入返回数组,不是文件则进入该文件

        :param path: 目录文件夹
        :param file_suffixes: 需要搜索的后缀类型,数组或者元祖
        :param deepth: 是否开启深度搜索模式,默认不开启
        :param abs_paths:
        :return: 符合后缀条件文件的绝对路径组成的列表
        """

        if abs_paths is None:
            abs_paths = []
        # 遍历当前目录下所有数据
        for fileName in iter(os.listdir(path)):  # iter迭代器优化内存
            # 两重判断,首选判断是否是文件还是文件夹,是文件则判断是否符合后缀,是文件夹则深入
            file_path = os.path.join(path, fileName)
            if os.path.isfile(file_path):
                # 判断文件后缀是否符合条件,符合条件的文件完善路径添加进入返回列表
                if Find.suffixName(file_path) in file_suffixes:
                    abs_paths.append(file_path)
            elif os.path.isdir(file_path):
                if deepth:
                    cls.suffixeAbsPaths(file_path, *file_suffixes, abs_paths=abs_paths)
            else:
                continue
        return abs_paths


# 寻找到指定路径下指定后缀类型的文件,未找到则返回False
def find_targetFile(file_path: str, *file_suffixes, deepth: bool = False):
    """
    寻找到指定路径下指定后缀类型的文件,未找到则返回False

    :param file_path: 文件在框架内的相对位置,从根目录开始
    :param file_suffixes: 文件指定的后缀名
    :param deepth: 是否开启深度搜索模式
    :return: 在指定路径下符合条件文件的绝对路径组成的列表,未找到则返回False
    """

    file_path = os.path.join(rootPath, file_path)  # 指定文件所在的绝对路径
    suffixe_abs_paths = Find.suffixeAbsPaths(file_path, *file_suffixes, deepth=deepth)  # 获取指定后缀文件绝对路径组成的列表
    if suffixe_abs_paths:
        return suffixe_abs_paths
    else:
        return False


if __name__ == '__main__':
    path_lib = os.path.join(rootPath, "lib")
    print(f"Find.suffixName方法返回当前文件绝对路径的后缀名为:{Find.suffixName(__file__)}")
    print(find_targetFile(path_lib, "py", deepth=True))
